<?php

/**
 * This is the model class for table "asistente_catedra".
 *
 * The followings are the available columns in table 'asistente_catedra':
 * @property integer $id_rol_partido
 * @property string $numero_carne
 *
 * The followings are the available model relations:
 * @property RolPartido $idRolPartido
 */
class AsistenteCatedra extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return AsistenteCatedra the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'asistente_catedra';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('id_rol_partido, numero_carne', 'required'),
			array('id_rol_partido', 'numerical', 'integerOnly'=>true),
			array('numero_carne', 'length', 'max'=>45),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('id_rol_partido, numero_carne', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'rol_partido' => array(self::BELONGS_TO, 'RolPartido', 'id_rol_partido'),
			'estado_laboral' => array(self::BELONGS_TO, 'EstadoLaboral', 'id_estado_laboral'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'id_rol_partido' => 'Id Rol Partido',
			'numero_carne' => 'Numero Carne',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id_rol_partido',$this->id_rol_partido);
		$criteria->compare('numero_carne',$this->numero_carne,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}	
	
	public function guardarAsistenteCatedra($datos){
		$id_asistente_catedra=-1;
		$datos_personales=$datos['datos_personales'];
		$nombrePartido=Persona::model()->obtenerNombrePartidoDeDatosPersonales($datos_personales);
		$id_partido=Partido::model()->guardarDatosPartido($datos,$nombrePartido);
		if($id_partido!=-1&&isset($id_partido)){
			$datos['id_partido']=$id_partido;
			$persona=new Persona();
			$datos_personales['id_partido']=$id_partido;
			$persona->attributes=$datos_personales;
			$persona->save();
			/**Se asigna como rol de asistente de catedra en la organizacion (no en el grupo de usuarios)*/
			$rolPartidoAsistenteCatedra=RolPartido::model()->obtenerRolPartido($id_partido, 'ASISTENTE_CATEDRA');
			/*Se crea el asistente de catedra y se asocia a su rol partido*/
			$asistenteCatedra=new AsistenteCatedra();
			$asistenteCatedra->id_rol_partido=$rolPartidoAsistenteCatedra->id;
			$asistenteCatedra->id_estado_laboral=$datos['datos_asistente_catedra']['id_estado_laboral'];
			$asistenteCatedra->empresa=$datos['datos_asistente_catedra']['empresa'];
			$asistenteCatedra->numero_carne=$datos['datos_asistente_catedra']['numero_carne'];
			$asistenteCatedra->trabaja=isset($datos['datos_asistente_catedra']['trabaja'])?1:0;
			//echo ($asistenteCatedra->save()?"Si guardo asistente catedra":"no guardo asistente catedra")."\n";	
			$asistenteCatedra->save();		
			$id_asistente_catedra=$asistenteCatedra->id_rol_partido;
			
			$rolPartidoUsuario=RolPartido::model()->obtenerRolPartido($id_partido,'USUARIO');
			$usuario=new Usuario();
			$usuario->username=$asistenteCatedra->numero_carne;
			$usuario->password=$datos['datos_usuario'][	'password']!=''?trim($datos['datos_usuario']['password']):Yii::app()->authUtil->generatePassword();
			$usuario->activo=isset($datos['datos_usuario']['activo'])?1:0;
			$usuario->id_rol_partido=$rolPartidoUsuario->id;
			$usuario->save();
			//echo $usuario->save()?"Si guardo usuario":"no guardo usuario";
			//Yii::app()->end();
			//Asignamos al usuario al grupo de asistente de catedras
			$grupoAsistentesCatedra=Grupo::model()->find("descripcion=:descripcion",array(':descripcion'=>'ASISTENTES_DE_CATEDRA'));
			$grupoAsistentesCatedra->asignarUsuario($usuario);
		
		}
		else{
			throw  new Exception('No han podido guardarse los datos del partido, no podra realizarze ninguna otra transaccion');
		}
		return $id_asistente_catedra;
	}
	
	public function actualizarDatosAsistenteCatedra($datos){
		//Actualizamos datos del asistente de catedra
		$asistenteCatedra=AsistenteCatedra::model();
		$asistenteCatedra->id_rol_partido=$datos['datos_asistente_catedra']['id_rol_partido'];
		$asistenteCatedra->id_estado_laboral=$datos['datos_asistente_catedra']['id_estado_laboral'];
		$asistenteCatedra->numero_carne=$datos['datos_asistente_catedra']['numero_carne'];
	    $asistenteCatedra->trabaja=isset($datos['datos_asistente_catedra']['trabaja'])?1:0;
	    $asistenteCatedra->empresa=$datos["datos_asistente_catedra"]['empresa'];
	   	$asistenteCatedra->save();
		//Actualizamos datos del partido
		$partido=$asistenteCatedra->rol_partido->partido;
		$partido->nombre=$datos["datos_personales"]["nombre"];
		$partido->save();
		$partido->actualizarTelefono($datos["datos_contacto"]["telefono_celular"],'C');
		$partido->actualizarTelefono($datos["datos_contacto"]["telefono_domicilio"],'D');
		if(isset($datos['correos_electronicos'])){
			$partido->actualizarCorreosElectronicos($datos["correos_electronicos"]);
		}		
		//Actualizo los datos de la persona
		$persona=$partido->persona;
		$persona->attributes=$datos["datos_personales"];
		$persona->save();
		//Actualizo los datos del usuario
		$usuario=$partido->usuario();
		if(trim($datos["datos_usuario"]["password"])!=""){
			$usuario->password=$datos["datos_usuario"]["password"];
		}
		$usuario->username=$datos["datos_asistente_catedra"]["numero_carne"];
		$usuario->activo=isset($datos["datos_usuario"]["activo"])?1:0;
		$usuario->save();
		return true;
	}
	
	public function buscarAsistentesCatedraPaginado($indiceRegistroInicio,$numeroRegistrosPagina,$busqueda=""){
		$busqueda=addcslashes($busqueda,'%_');
		$criteria=new CDbCriteria(array(
				'condition'=>"numero_carne like :busqueda",
				'params'=>array(':busqueda'=>"%$busqueda%"),
				'with'=>array(
						'rol_partido.partido',
						'rol_partido.partido.correos_electronicos',
						'rol_partido.partido.telefonos',
						'estado_laboral')
		));
		$resultados=Yii::app()->paginacionUtil->buscarRegistrosPaginados($indiceRegistroInicio,$numeroRegistrosPagina,$criteria,AsistenteCatedra::model());
		return $resultados;
	}
	
	public function buscarAsistentesCatedraPaginadoArray($indiceRegistroInicio,$numeroRegistrosPagina,$busqueda=""){
		$asistentesCatedra=$this->buscarAsistentesCatedraPaginado($indiceRegistroInicio, $numeroRegistrosPagina,$busqueda);
		$asistentesCatedraAArray=array();
		foreach ($asistentesCatedra as $asistenteCatedra){
			$asistenteCatedraAArray=array();
			//Inicializo campos opcionales a N/D
			$asistenteCatedraAArray['celular']='N/D';
			$asistenteCatedraAArray['telefono']='N/D';
			$asistenteCatedraAArray['correo_electronico']='N/D';
	
			$asistenteCatedraAArray['numero_carne']=$asistenteCatedra->numero_carne;
			$asistenteCatedraAArray['trabaja']=$asistenteCatedra->trabaja;
			$asistenteCatedraAArray['empresa']=$asistenteCatedra->empresa;
			$asistenteCatedraAArray['nombre']=$asistenteCatedra->rol_partido->partido->nombre;
			$asistenteCatedraAArray['id_partido']=$asistenteCatedra->rol_partido->partido->id;
			$asistenteCatedraAArray['id_rol_partido']=$asistenteCatedra->id_rol_partido;
			if(count($asistenteCatedra->rol_partido->partido->correos_electronicos)>0){
				$asistenteCatedraAArray['correo_electronico']=$asistenteCatedra->rol_partido->partido->correos_electronicos[0]->correo_electronico;
			}
			if(count($asistenteCatedra->rol_partido->partido->telefonos)>0){
				$telefonos=$asistenteCatedra->rol_partido->partido->telefonos;
				foreach ($telefonos as $telefono){
					if($telefono->tipo_telefono=='D'){
						$etiquetaTelefono='telefono';
					}
					else if($telefono->tipo_telefono=="C"){
						$etiquetaTelefono='celular';
					}
					$asistenteCatedraAArray[$etiquetaTelefono]=$telefono->numero;
				}
			}
			$asistenteCatedraAArray['creado']=$asistenteCatedra->rol_partido->creado;
			$estadoLaboral='N/D';
			if (isset($asistenteCatedra->id_estado_laboral)){
				$estadoLaboral=$asistenteCatedra->estado_laboral->descripcion;
			}
		    $asistenteCatedraAArray['estado_laboral']=$estadoLaboral;
						
			$asistentesCatedraAArray[]=$asistenteCatedraAArray;
		}
		return $asistentesCatedraAArray;
	}
}